import { defineStore } from "pinia";
import { resDetailsData, resHomeData, resQuestionData } from '../api'
import router from "../router";
import { useUserStore } from "./userStore";
import { ElMessage } from 'element-plus'
const useDataStore = defineStore('detail', {
    state() {
        return {
            // HomeData 属性尝试解析本地存储中的 home 项
            HomeData: JSON.parse(localStorage.getItem('home') as string) || [],
            // DetailData 和 QuestionData 属性被初始化为空数组（[]），类型为 any。
            DetailData: [] as any,
            QuestionData: [] as any,
            // State 属性被初始化为布尔值
            State: false,
        }
    },
    // 异步的 getHomeData 方法，它调用了一个名为 resHomeData 的函数来获取数据，然后处理这些数据。
    actions: {
        async getHomeData() {
            // 声明了一个变量 result 并使用 await 关键字来等待 resHomeData() 函数的执行结果
            let result: any = await resHomeData()
            // result 对象的 status 属性是否等于 200。HTTP 状态码 200 通常表示请求成功。
            if (result.status === 200) {
                // 将 result.data.data 的值赋给组件的 HomeData 状态属性
                this.HomeData = result.data.data
                // 将 this.HomeData 的值转换为 JSON 字符串，并使用 localStorage.setItem 方法将其存储到浏览器的本地存储中，键名为 "home"
                localStorage.setItem("home", JSON.stringify(this.HomeData))
                return 'ok'
            } else {
                // esult.status 不等于 200，返回一个拒绝的 Promise.其中包含一个错误对象。对象的消息来自 result.message，包含了错误信息。
                return Promise.reject(new Error(result.message))
            }
        }
        ,
        async getDetailData(corId: number) {
            // router.push 方法导航到 'details' 路径，带有查询参数 corId。在单页面应用中更新当前视图而不刷新页面。
            router.push({ path: 'coursedetail', query: { corId: corId } })
            let result: any = await resDetailsData(corId)
            if (result.status === 200) {
                console.log("课程详情数据", result.data.data)
                // 将 result.data.data 的值赋给组件的 DetailData 状态属性。result.data.data 包含课程详情数据
                this.DetailData = result.data.data
                return 'ok'
            } else {
                // esult.status 不等于 200，返回一个拒绝的 Promise.其中包含一个错误对象。对象的消息来自 result.message，包含了错误信息。
                return Promise.reject(new Error(result.message))
            }

        },
        async getQuestionData(corId: number) {

            let result: any = await resQuestionData(corId)
            if (result.status === 200) {
                console.log("课程问答数据", result.data.data)
                // 将 result.data.data 的值赋给组件的 QuestionData 状态属性。result.data.data 包含课程问答数据

                this.QuestionData = result.data.data
                return 'ok'
            } else {
                return Promise.reject(new Error(result.message))
            }

        },
        changeState(id: number) {
            const useUser = useUserStore()
            if (useUser.isLogin) {
                const data = this.HomeData.find((item: any) => item.currNo === id);
                if (data) {
                    this.State = true
                    data.autoSelect = !data.autoSelect;
                    localStorage.setItem("home", JSON.stringify(this.HomeData))
                }
            } else {
                ElMessage({
                    type: 'info',
                    message: '你还未登录，无法开始学习',
                })
                return;
            }

        },
        selectState(id: number) {
            const data = this.HomeData.find((item: any) => item.currNo === id);
            if (data) {
                this.State = data.autoSelect
            }
        }
    },
    getters: {
        theHome: state => state.HomeData,//首页数据
        theDetail: state => state.DetailData,//详情数据
        theQuestion: state => state.QuestionData,//课程问答数据
        theCollect: state => state.HomeData.filter((home: any) => home.autoSelect)//我的课程数据
    }
})

export default useDataStore
